package cn.lxycx.dataterrace.util;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import lxycx.util.http.RequestPro;
import net.sf.json.JSONObject;

import org.apache.log4j.Logger;

/**
 * 一个TemplateMsg对象表示一个模板实例。
 * 模板ID相同的情况下，可以重复使用该实例
 * 
 * @author RUNTIME
 * 时间：2018年3月13日
 */
public class TemplateMsg {
	private static Logger log = Logger.getLogger(TemplateMsg.class);
	private String temid;//实例变量 模板ID
	
	public TemplateMsg(String temid){
		this.temid = temid;
	}
	
	/**
	 * 
	 * 准备发送模板消息，并返回发送结果 0表示成功 （可重复调用）
	 * 创建时间：2018年3月14日
	 *
	 */
	public Integer send(String openid,String token,TMsg msg){
		String json = toJson(temid,openid,msg.getUrl(),msg.getData());
		return sendPost(json, token);
	}
	
	
	/**
	 * 发送模板消息
	 * 创建时间：2016-12-8
	 *
	 */
	private Integer sendPost(String data,String token){
		try {
			String str = RequestPro.submit("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+token, data, null);
			JSONObject retjson = JSONObject.fromObject(str);
			Integer code = retjson.getInt("errcode");
			if(code==40001){//授权信息有误，重新获取token再发送请求；
				log.info("发送模板消息：40001 正在获取新的token重新发送");
				return null;
			}
			log.info("发送消息模板返回："+code+"------json:"+data);
			return code;
		}catch (IOException e) {
			log.error(e.getMessage());
			return null;
		}
	}
	
	
	
	/**
	 * 格式化成json
	 * 创建时间：2016-12-7
	 *
	 */
	public static String toJson(String temid,String openid,String url,Map<String,Map<String,String>> data) {
		JSONObject json = new JSONObject();
		json.put("touser",openid);
		json.put("template_id", temid);
		json.put("url",url);
		json.put("data", JSONObject.fromObject(data));
		return json.toString();
	}
	
	
	/**
	 * 模板消息内容
	 * 时间：2018年3月13日
	 */
	public static class TMsg{
		private String url;
		private Map<String,Map<String,String>> data = new HashMap<String, Map<String,String>>();
		
		public String getUrl(){
			return url;
		}
		
		public Map<String,Map<String,String>> getData(){
			return data;
		}
		
		public TMsg(String url){
			this.url = url;
		}
		
		
		/**
		 * 添加消息节点
		 * 创建时间：2016-12-7
		 */
		public TMsg addData(String key,String value,String color){
			Map<String,String> values = new HashMap<String, String>();
			values.put("value", value);
			values.put("color", color);
			data.put(key, values);
			return this;
		}
	}

}

